const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken')

// 导入 moment
const moment = require('moment')
const AccountModel = require('../../models/AccountModel')

// 导入中间件
const checkTokenMiddleware = require('../../middlewares/checkTokenMiddleware')

// 记账本的列表
router.get('/account', checkTokenMiddleware, async function (req, res, next) {
  console.log(req.user)
  // 读取集合信息
  try {
    const data = await AccountModel.find().sort({ time: -1 })
    res.json({
      // 响应编号
      code: '0000',
      // 响应信息
      msg: '读取成功',
      // 响应数据
      data: data
    })
  } catch (error) {
    console.error('数据库操作失败：', error)
    res.json({
      code: '1001',
      msg: '读取失败',
      data: null
    })
    return
  }
})

// 新增记录
router.post('/account', checkTokenMiddleware, async (req, res) => {
  // 表单验证
  // 此处未验证
  try {
    // 新增
    const data = await AccountModel.create({
      ...req.body,
      // 修改 time 属性的值
      time: moment(req.body.time).toDate()
    })
    console.log(data)
    res.json({
      code: '0000',
      msg: '创建成功',
      data: data
    })
  } catch (error) {
    console.error('数据库操作失败：', error)
    return res.json({
      code: '1002',
      msg: '创建失败',
      data: null
    })
  }
  // 插入数据库
  // AccountModel.create({
  //   ...req.body,
  //   // 修改 time 属性的值
  //   time: moment(req.body.time).toDate()
  // })
  //   .then((data) => {
  //     console.log(data)
  //     res.render('success', { msg: '添加成功~', url: '/account' })
  //   })
  //   .catch((error) => {
  //     res.status(500).send(error)
  //   })
})

// 删除记录
router.delete('/account/:id', checkTokenMiddleware, async (req, res) => {
  // 获取 params 的 id
  let id = req.params.id
  // 删除文件中的记录
  try {
    await AccountModel.deleteOne({ _id: id })
    res.json({
      code: '0000',
      msg: '删除成功',
      data: null
    })
  } catch (error) {
    console.error('数据库操作失败：', error)
    return res.json({
      code: '1003',
      msg: '删除账单失败',
      data: null
    })
  }
})

// 获取单个账单信息
router.get('/account/:id', checkTokenMiddleware, async (req, res) => {
  // 获取 id 参数
  let { id } = req.params
  try {
    const data = await AccountModel.findById(id)
    console.log(data)
    res.json({
      code: '0000',
      msg: '读取成功',
      data: data
    })
  } catch (error) {
    console.error('数据库操作失败：', error)
    return res.json({
      code: '1004',
      msg: '读取账单失败',
      data: null
    })
  }
})

// 更新单个账单信息
router.patch('/account/:id', checkTokenMiddleware, async (req, res) => {
  // 获取 id 参数
  let { id } = req.params
  try {
    await AccountModel.updateOne({ _id: id }, req.body)
    // 再次查询数据库，获取单条信息
    const data = await AccountModel.findById(id)
    res.json({
      code: '0000',
      msg: '更新成功',
      data: data
    })
  } catch (error) {
    console.error('数据库操作失败：', error)
    return res.json({
      code: '1005',
      msg: '更新账单失败',
      data: null
    })
  }
})

router.all('*', (req, res) => {
  res.send('<h1>404 Not Found</h1>')
})

module.exports = router
